#ifndef NEURAL_NET_MAIN_
#define NEURAL_NET_MAIN_

#include "data-reader.h"
#include "neural-net.h"
#include <assert.h>
#include <cstdlib>
#include <cstdio>
#include <sstream>
#include <iostream>
#include <map>

using std::cout;
using std::endl;
using std::map;
using std::stringstream;

class PlantNetwork {
 public:
  PlantNetwork(const string& type);

  Target EncodeLabel(int label);

  int GetNetworkLabel();

  Input Convert(Image* image);

  int Classify(Image* image);

  double Performance(const vector<Image*>& images);
  
  void Train(const vector<Image*>& images,
             const vector<Image*>& validation_images,
             double learning_rate, int epochs,
             int max_periods_without_improvement,
             double improvement_perc,
						 int printFlag);

  NeuralNetwork network_;
};

#endif /* NEURAL_NET_MAIN_ */
